/**
 * Title: IBaseDao.java
 * Description:
 * Copyright: Copyright (c) 2008
 * Company:深圳彩讯科技有限公司
 * Author 罗旭东 (hi@luoxudong.com)
 * Date 2013-8-14 下午2:44:45
 * Version 1.0 
 */
package com.luoxudong.phonenumber.service.database.interfaces;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import android.R.integer;

/** 
 * ClassName: IBaseDao 
 * Description:数据库操作Dao层接口
 * Create by 罗旭东
 * Date 2013-8-14 下午2:44:45 
 */
public interface IBaseDao<T, ID extends Serializable> {
	/**
	 * 插入一条记录,保存对象信息到数据库中
	 * @param entity 需要保存到数据库中的对象
	 * @return 插入成功后的记录ID,失败返回-1
	 * @throws Exception
	 */
	public long insert(T entity) throws Exception;

	/**
	 * 批量插入一条记录,保存对象信息到数据库中
	 * @param entityList 需要保存到数据库中的对象集合
	 * @return 批量插入是否成功
	 * @throws Exception
	 */
	public boolean batchInsert(List<T> entityList) throws Exception;

	/**
	 * 更新数据
	 * @param entity 需要更新的数据对象
	 * @param where 更新记录条件
	 * @return 更新成功的记录行数
	 * @throws Exception
	 */
	public int update(T entity, T where) throws Exception;

	/**
	 * 更新数据
	 * @param entity 需要更新的数据对象
	 * @param whereClause 需要更新的记录条件
	 * @param whereArgs 满足条件的参数
	 * @return 更新成功的记录行数
	 */
	public int update(T entity, String whereClause, String[] whereArgs);
	
	/**
	 * 更新数据
	 * @param values 需要更新的数据字段
	 * @param whereClause 需要更新的记录条件
	 * @param whereArgs 满足条件的参数
	 */
	public int update(Map<String, String> values, String whereClause, String[] whereArgs);
	
	/**
	 * 删除数据
	 * @param entity 删除记录条件
	 * @return 删除记录行数
	 * @throws Exception
	 */
	public int delete(T where) throws Exception;

	/**
	 * 删所有数据
	 * @return
	 * @return int
	 */
	public int deleteAllData();
	
	/**
	 * 批量删除数据
	 * @param entityList 删除条件
	 * @return 删除是否成功
	 * @throws Exception
	 */
	public boolean batchDelete(List<T> whereList) throws Exception;

	/**
	 * 查询记录,查询结果将以列表形式返回，返回对象列表
	 * @param where 查询条件对象
	 * @param entityClass 模板类
	 * @param orderBy 排序方式
	 * @param startIndex 分页查询开始索引
	 * @param limit 查询记录条数
	 * @return 结果集
	 */
	public List<T> query(T where, Class<T> entityClass, String orderBy, Integer startIndex, Integer limit);

	/**
	 * 查询记录,查询结果将以列表形式返回，返回对象列表
	 * @param sql 查询sql语句
	 * @param selectionArgs 查询条件对应的参数
	 * @param entityClass 模板类
	 * @return 返回对象列表
	 */
	public List<T> query(String sql, String[] selectionArgs, Class<T> entityClass);

	/**
	 * 查询记录，查询结果以列表返回，返回简直对应列表
	 * @param sql 查询sql语句
	 * @param selectionArgs 查询条件对应的参数
	 * @return 结果列表
	 */
	public List<Map<String, Object>> query(String sql, String[] selectionArgs);

	/**
	 * 查询记录条数
	 * @param where 查询条件
	 * @return 符合条件的记录数
	 */
	public long queryCount(T where);
	
	/**
	 * 计算总条数
	 * @return long
	 */
	public long queryCount();
	
	/**
	 * 查询记录条数
	 * @param sql 查询sql语句
	 * @param selectionArgs 查询条件
	 * @return 符合条件的记录个数
	 */
	public long queryCount(String sql, String[] selectionArgs);
	
	/**
	 * 获取最大的ID值
	 * @return
	 */
	public long getMaxId();
}
